import React from "react";
import { TextField, Typography, MenuItem } from "@mui/material";
import { RowFlexBoxSC } from "../common/Common";
import { formattedDate } from "../common/utilities";
const { format } = require('date-fns');
/**
 * 部门的选项
 */
export const PublishDepartment = [
  { label: "不限" },
  { label: "全国人民代表大会" },
  { label: "全国人大常委会" },
  { label: "国务院各机构" },
  { label: "中央军事委员会" },
  { label: "党中央部门机构" },
  { label: "其他机构" },
];
/**
 * 效力级别
 */
export const EffectivenessLevel = [
  { label: "不限" },
  { label: "宪法" },
  { label: "法律" },
  { label: "司法解释" },
  { label: "行政法规" },
  { label: "监察法规" },
];
/**
 * 有效性
 */
export const Valid = [{ label: "不限" },{ label: "现行有效" }, { label: "现行无效" }];
/**
 * 搜索模式
 */
export const fullText = [{ label: "标题" }, { label: "全文" }];

/**
 * 字符串和Boolean的转换模型
 */
export const SEARCH_MODEL = { 标题: false, 全文: true };
export const VALID_MODEL = { 现行有效: true, 无效: false, 不限: undefined };
export const CHINESE_SEARCH_MODEL = { false: "标题", true: "全文" };


/**
 * 检查开始日期和结束日期的有效性
 * @param {string} startDate - 开始日期
 * @param {string} endDate - 结束日期
 * @returns {string|null} - 如果有错误，返回错误信息；如果没有错误，返回 null
 */
export function validateDates(startDate, endDate) {
  const start = new Date(startDate);
  const end = new Date(endDate);

  // 检查开始日期和结束日期是否都为空
  if (!startDate && !endDate) {
    return null; // 如果两个日期都为空，则不返回错误
  }

  // 检查结束日期是否早于开始日期
  if (start > end) {
    return "结束日期不能早于开始日期";
  }

  return null; // 如果没有错误，返回 null
}

// eslint-disable-next-line consistent-return
export const formattedSearchData = (type, data) => {
  if (type === "submit") {
    // 为提交操作格式化数据
    return {
      ...data,
      isValid: VALID_MODEL[data.isValid],
      fullText: SEARCH_MODEL[data.fullText],
    };
  } else if (type === "show") {
    // 结果数组
    const resultArray = [];
    // 检查 publishStartDate 和 publishEndDate 是否有效
    const publishStartDate = data.publishStartDate || "";
    const publishEndDate = data.publishEndDate || "";
    if (publishStartDate !== "" && publishEndDate !== "") {
      // 构建 "公布年份" 对象
      const yearRange = `${format(publishStartDate, 'yyyy-MM-dd')} 到 ${format(publishEndDate, 'yyyy-MM-dd')}`;
      const yearObj = {
        publishedAt: yearRange,
      };
      // 将 "公布年份" 对象添加到结果数组
      resultArray.push(yearObj);
    }

    // 遍历对象，构建新的结构并添加到数组中
    Object.entries(data).forEach(([key, value]) => {
      // 忽略不需要添加到数组中的键
      // 同时检查 value 是否为空字符串或 "不限"
      if (
        key === "fullText" ||
        key === "publishStartDate" ||
        key === "publishEndDate" ||
        !value ||
        value === "不限"
      ) {
        return;
      }
      // 使用 fullText 的值作为新对象的键，构建新对象
      const formattedObj =
        key === "keywords"
          ? { [SEARCH_MODEL[data.fullText]]: value }
          : key
          ? { [key]: value }
          : null;

      // 将新对象添加到结果数组（如果它不是 null 并且 value 不为空或 "不限"）
      if (formattedObj && value !== "" && value !== "不限") {
        resultArray.push(formattedObj);
      }
    });

    return resultArray;
  }
};
/**
 *  SearchTextField
 */
//TODO 进行有效性检查，是否符合格式
export function SelectTextFiled({
  title,
  id,
  label,
  options,
  value,
  onChange,
}) {
  return (
    <RowFlexBoxSC sx={{ mt: "15px" }}>
      <Typography variant="body1" noWrap sx={{ minWidth: "85px" }}>
        {title}
      </Typography>
      <TextField
        id={id}
        select
        label={label}
        fullWidth
        size="small"
        sx={{ ml: 2 }} // 添加左侧间距
        value={value}
        onChange={onChange}>
        {options.map((option) => (
          <MenuItem key={option.label} value={option.label}>
            {option.label}
          </MenuItem>
        ))}
      </TextField>
    </RowFlexBoxSC>
  );
}
export function DatePicker({
  title,
  id,
  startDate,
  endDate,
  handlePublishStartDateChange,
  handlePublishEndDateChange,
}) {
  return (
    <RowFlexBoxSC sx={{ mt: "15px" }}>
      <Typography variant="body1" noWrap sx={{ minWidth: "85px" }}>
        {title}
      </Typography>
      <TextField
        id={id}
        type="date"
        fullWidth
        size="small"
        sx={{ ml: 2, mr: 2 }} // 添加左侧间距
        value={formattedDate(startDate)}
        onChange={handlePublishStartDateChange}
      />
      <Typography variant="body1" noWrap sx={{ minWidth: "15px" }}>
        至
      </Typography>
      <TextField
        id="date-picker"
        type="date"
        fullWidth
        size="small"
        sx={{ ml: 2 }} // 添加左侧间距
        value={formattedDate(endDate)}
        onChange={handlePublishEndDateChange}
      />
    </RowFlexBoxSC>
  );
}
